package com.cskaoyan.javse.oop2._1extends._2conversion;

/**
 * 引用数据类型的类型转换:
 *      1.如果引用数据类型能够发生类型转换,那么它转换的是什么?
 *          对象显然是不可能转换的,new对象后,要么就等着销毁,要么就使用它,不可能转换它
 *          类型转换只能转换引用.
 *      2.引用可以转换,条件是什么呢?
 *          正是因为有了继承,引用数据类型才可以发生类型转换,所以继承是引用数据类型类型转换的前提条件.
 *          只有继承中两个类,才有可能发生类型转换.
 *      3.引用数据类型类型转换的分类:
 *          1.自动类型转换: 不需要写任何代码,编译器自动完成的类型转换
 *          2.强制类型转换: 需要程序员手动写代码完成的类型转换,不写代码会报错
 *
 *      4.自动类型转换:
 *          把子类的引用转换成父类的引用,这个过程,可以自动完成,这就是引用数据类型的自动类型转换.
 *          从继承的方向上来说,子类引用---> 父类引用,是从下到上的,所以引用数据类型的自动类型转换也称之为"向上转型"
 *          自动类型转换主要还是依靠子类"is-a"父类.
 *
 *      5.强制类型转换:
 *          把父类的引用转换成子类的引用,这个过程,不能自动完成,这就是引用数据类型的强制类型转换
 *          需要写代码手动完成,语法:
 *              子类类名 对象名 = (子类的类名)父类引用;
 *          关于引用数据类型的强制类型转换,它比较独特,我们放在后面再讲(它很危险,不要随便做强转)
 *          把父类的引用转换成子类的引用,这个过程相当于父类当成子类来使用,大多数情况下这都不不可能.
 *          从继承的方向上来说,父类引用---> 子类引用,是从上到下的,所以引用数据类型的强制类型转换也称之为"向下转型"
 *
 *
 *
 *
 *
 * @since 15:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        Father f;
        f = s;

        // 上述代码,三合一,得到下面语句
        Father fs = new Son();

        Son s2 = (Son) fs;
    }
}

class Father {
}

class Son extends Father {
}
